#include <gtest/gtest.h>

#include <mutex>
#include <thread>
#include <vector>

// 演示 std::mutex + std::lock_guard 的基本用法：
// 多个线程对共享计数器进行递增，lock_guard 确保临界区互斥。
TEST(MutexTest, LockGuardProtectsCounter) {
    std::mutex m;
    int counter = 0;
    constexpr int threadCount = 8;
    constexpr int incrementsPerThread = 1000;

    // 工作线程：每次递增前获取锁，确保对 counter 的访问是安全的。
    auto worker = [&]() {
        for (int i = 0; i < incrementsPerThread; ++i) {
            std::lock_guard<std::mutex> lock(m);
            ++counter;
        }
    };

    std::vector<std::thread> threads;
    // 启动多个线程同时执行 worker。
    for (int i = 0; i < threadCount; ++i) {
        threads.emplace_back(worker);
    }
    // 等待所有线程完成。
    for (auto& t : threads) {
        t.join();
    }

    // 最终计数应等于线程数 × 每线程的递增次数。
    EXPECT_EQ(counter, threadCount * incrementsPerThread);
}